//package cn.stylefeng.qz.core.util;
//
//import cn.hutool.core.util.StrUtil;
//import com.google.zxing.BarcodeFormat;
//import com.google.zxing.EncodeHintType;
//import com.google.zxing.MultiFormatWriter;
//import com.google.zxing.WriterException;
//import com.google.zxing.common.BitMatrix;
//import com.google.zxing.qrcode.QRCodeWriter;
//import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
//import lombok.extern.slf4j.Slf4j;
//import net.coobird.thumbnailator.Thumbnails;
//import net.coobird.thumbnailator.geometry.Position;
//
//import javax.imageio.ImageIO;
//import java.awt.*;
//import java.awt.image.BufferedImage;
//import java.io.ByteArrayOutputStream;
//import java.io.File;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.util.Calendar;
//import java.util.HashMap;
//import java.util.Hashtable;
//import java.util.Map;
//
///**
// * @author qinj
// * @description 生成二维码工具类
// * TODO 图片大小位置待调整
// * @date 2018/11/21 10:21
// */
//@Slf4j
//public class QRcodeUtils {
//
//    public static final String FILE_TYPE_PNG = ".png";
//    private static final int QRCOLOR = 0xFF000000; // 二维码颜色 默认是黑色
//    private static final int BGWHITE = 0xFFFFFFFF; // 背景颜色
//
//    private static Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>() {
//        private static final long serialVersionUID = 1L;
//
//        {
//            // 设置QR二维码的纠错级别（H为最高级别）具体级别信息
//            put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
//            // 设置编码方式
//            put(EncodeHintType.CHARACTER_SET, "utf-8");
//            put(EncodeHintType.MARGIN, 0);
//        }
//    };
//
//    public static String createQRCode(String content, int qrSize, String qrCodeStorePath, String storePath, String logo) {
//        try {
//            MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
//            // 参数顺序分别为：编码内容，编码类型，生成图片宽度，生成图片高度，设置参数
//            BitMatrix bm = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, qrSize, qrSize, hints);
//            BufferedImage image = new BufferedImage(qrSize, qrSize, BufferedImage.TYPE_INT_RGB);
//
//            // 开始利用二维码数据创建Bitmap图片，分别设为黑（0xFFFFFFFF）白（0xFF000000）两色
//            for (int x = 0; x < qrSize; x++) {
//                for (int y = 0; y < qrSize; y++) {
//                    image.setRGB(x, y, bm.get(x, y) ? QRCOLOR : BGWHITE);
//                }
//            }
//
//            //把logo画到二维码上面
//            if (StrUtil.isNotBlank(logo)) {
//                // 构建绘图对象
//                Graphics2D graphics2D = image.createGraphics();
//                graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//                graphics2D.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
//                Stroke s = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
//                graphics2D.setStroke(s);
//                // 读取Logo图片
//                BufferedImage logoImage = ImageIO.read(new File(logo));
//                // 开始绘制logo图片 等比缩放：（width * 2 / 10 height * 2 / 10）不需缩放直接使用图片宽高
//                //width * 2 / 5 height * 2 / 5  logo绘制在中心点位置
//                graphics2D.drawImage(logoImage, qrSize / 2 - (228 / 2), qrSize / 2 - (228 / 2), logoImage.getWidth(), logoImage.getHeight(), null);
//                graphics2D.dispose();
//                logoImage.flush();
//            }
//            String file = qrCodeStorePath + createFileName(FILE_TYPE_PNG);
//            File createFile = new File(storePath + file);
//            if (!createFile.getParentFile().exists()) {
//                createFile.mkdirs();
//            }
//            image.flush();
//            ImageIO.write(image, "png", new File(storePath + file));
//            return file;
//        } catch (IOException | WriterException e) {
//            log.error("", e);
//            return null;
//        }
//    }
//
//
//    /**
//     * @description 生成二维码，返回二维码存放位置
//     * @author qinj
//     * @since 2018/11/21 10:24
//     */
//    @Deprecated
//    public static String createQRcode(String content, int qrSize, String qrCodeStorePath, String storePath) {
//        try {
//            Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<>();
//            hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);  // 矫错级别
//            QRCodeWriter qrCodeWriter = new QRCodeWriter();
//            //创建比特矩阵(位矩阵)的QR码编码的字符串
//            BitMatrix byteMatrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, qrSize, qrSize, hintMap);
//            // 使BufferedImage勾画QRCode  (matrixWidth 是行二维码像素点)
//            int matrixWidth = byteMatrix.getWidth();
//            BufferedImage image = new BufferedImage(matrixWidth - 200, matrixWidth - 200, BufferedImage.TYPE_INT_RGB);
//            image.createGraphics();
//            Graphics2D graphics = (Graphics2D) image.getGraphics();
//            graphics.setColor(Color.WHITE);
//            graphics.fillRect(0, 0, matrixWidth, matrixWidth);
//            // 使用比特矩阵画并保存图像
//            graphics.setColor(Color.BLACK);
//            for (int i = 0; i < matrixWidth; i++) {
//                for (int j = 0; j < matrixWidth; j++) {
//                    if (byteMatrix.get(i, j)) {
//                        graphics.fillRect(i - 100, j - 100, 1, 1);
//                    }
//                }
//            }
//            String file = qrCodeStorePath + createFileName(FILE_TYPE_PNG);
//            File createFile = new File(storePath + file);
//            if (!createFile.getParentFile().exists()) {
//                createFile.mkdirs();
//            }
//            ImageIO.write(image, "JPEG", new FileOutputStream(new File(storePath + file)));
//            return file;
//        } catch (IOException | WriterException e) {
//            log.error("", e);
//            return null;
//        }
//    }
//
//    /**
//     * @description 填充图片模板
//     * @author qinj
//     * @since 2018/11/21 10:34
//     */
//    public static String fillImageTemplate(String template, String source, String storePath, String path, String wantedName) {
//        try {
//            String file = storePath + wantedName;
//            File createFile = new File(path + file);
//            if (!createFile.getParentFile().exists()) {
//                createFile.mkdirs();
//            }
//
//            File exportFile = new File(path + source);
//            if (!exportFile.getParentFile().exists())
//                exportFile.mkdirs();
//            if (!exportFile.exists())
//                exportFile.createNewFile();
//            Thumbnails.of(new File(path + template))
//                    .size(1181, 1181)
//                    .rotate(0)
//                    .watermark(new Position() {
//                        @Override
//                        public Point calculate(int enclosingWidth, int enclosingHeight, int width, int height, int insetLeft, int insetRight, int insetTop, int insetBottom) {
//                            int x = (enclosingWidth / 2) - (width / 2);
//                            int y = 280;
//                            return new Point(x, y);
//                        }
//                    }, ImageIO.read(exportFile), 1f)
//                    .outputQuality(1)
//                    .toFile(new File(path + file));
//            return file;
//        } catch (IOException e) {
//            log.error("", e);
//            return null;
//        }
//    }
//
//    /**
//     * @description 填充图片模板 流
//     * @author qinj
//     * @since 2018/11/21 10:34
//     */
//    public static ByteArrayOutputStream fillImageTemplateToStream(String template, String source, String storePath, String path, String wantedName) {
//        try {
//
//            ByteArrayOutputStream os = new ByteArrayOutputStream();
//            File exportFile = new File(path + source);
//            if (!exportFile.getParentFile().exists())
//                exportFile.mkdirs();
//            if (!exportFile.exists())
//                exportFile.createNewFile();
//            Thumbnails.of(new File(path + template))
//                    .size(1181, 1181)
//                    .rotate(0)
//                    .watermark(new Position() {
//                        @Override
//                        public Point calculate(int enclosingWidth, int enclosingHeight, int width, int height, int insetLeft, int insetRight, int insetTop, int insetBottom) {
//                            int x = (enclosingWidth / 2) - (width / 2);
//                            int y = 280;
//                            return new Point(x, y);
//                        }
//                    }, ImageIO.read(exportFile), 1f)
//                    .outputQuality(1)
//                    .toOutputStream(os);
//            os.flush();
//            os.close();
//            return os;
//        } catch (IOException e) {
//            log.error("", e);
//            return null;
//        }
//    }
//
//    private static String createFileName(String fileType) {
//        StringBuilder builder = new StringBuilder();
//        Calendar calendar = Calendar.getInstance();
//        builder.append(calendar.get(Calendar.YEAR));
//        builder.append(number2String(calendar.get(Calendar.MONTH)));
//        builder.append(number2String(calendar.get(Calendar.DAY_OF_MONTH)));
//        builder.append(number2String(calendar.get(Calendar.HOUR_OF_DAY)));
//        builder.append(number2String(calendar.get(Calendar.MINUTE)));
//        builder.append(number2String(calendar.get(Calendar.SECOND)));
//        builder.append(fileType);
//        return builder.toString();
//    }
//
//    private static String number2String(Number number) {
//        if (number.intValue() < 10)
//            return "0" + number;
//        return number.toString();
//    }
//}
